(function($) {
	/*nom de notre plug-in $.fn.{nom_du_plugin}*/
	$.fn.carrousel = function(params) {
		/*Nos paramètres que l'on pourra modifier depuis l'appel du plug-in*/
		var params = $.extend({
			timeout: 5000
		}, params);

		/*On declare nos variables et nos éléments de notre carrousel*/
		var ul_carousel = $(this).children('ul'), //notre liste d'image
		rowleft = $(this).children('div[class="moveto"]').children('a[href="#left"]'), //notre lien de déplacement vers la gauche
		rowright = $(this).children('div[class="moveto"]').children('a[href="#right"]'), //notre lien de déplacement vers la droite
		slideControl = $('.slideControl');
		position = 0, //notre position
		nbelements = 0, //le nombre d'éléments dans la liste
		$timer = null;

		/*On compte le nombre d'éléments dans la list et on le défini dans nbelements*/
		nbelements = ul_carousel.children('li').size();

		/*Fonction qui vas calculer la position et executer le "déplacement" vers l'élément*/
		function cedeplacer(id) {
			//On vérifie si l'id est valide et si il y a des éléments
			if (id > 0 && nbelements > 0) {
				//On vérifie si la position est différente
				if (id != position) {
					//Petite boucle sur la liste
					ul_carousel.children('li').each(function(index){
						t_position = (index+1); //On ajoute +1 pour la future position
						if (t_position == id) {
							position = t_position; //on initialise la variable position sur l'emplacement
							elshow = $(this);
							
							//On gére le li courant
							slideControl.find('li.current').removeClass('current');
							slideControl.children('li').eq(index).addClass('current');
							
							//Si il y a deja un element visible, on le masque et on affiche le nouveau
							if (ul_carousel.children('li:visible').size() > 0)
								ul_carousel.children('li:visible').fadeOut(200, function(){
									elshow.fadeIn(200); //Effet de transition
								});
							else
								elshow.show();
							
							//Petit reset du timer
							if ($timer != null){
								clearTimeout($timer);
								$timer = null;
							}

							if ($timer == null) {
								//Si on a atteint le dernier element on se repositionne sur le premier
								if (id == nbelements) {
									$timer = setTimeout(function(){
										cedeplacer(1);
									}, params.timeout);//si on arrive a la fin il faut bien repartir depuis le début non ;)
								}
								else {
									$timer = setTimeout(function(){
										cedeplacer((position+1));
									}, params.timeout);
								}
							}
						}
					});
				}
			}
		}

//		On affiche le premier élément de la liste
		if (nbelements > 0) {
			cedeplacer(1);
		}

//		Action sur la flèche de gauche
		rowleft.click(function(){
			if (position > 1) {
				clearTimeout($timer);
				$timer = null;
				cedeplacer((position-1));
			}else {
				clearTimeout($timer);
				$timer = null;
				cedeplacer(nbelements);
			}
			return false;
		});

//		Action sur la flèche de droite
		rowright.click(function(){
			if (position < nbelements) {
				clearTimeout($timer);
				$timer = null;
				cedeplacer((position+1));
			}else {
				clearTimeout($timer);
				$timer = null;
				cedeplacer(1);
			}
			return false;
		});
		
		//Click sur un li du SlideControl
		slideControl.find('li').each(function()
		{
			$(this).live('click',function()
			{
				var newposition = $(this).index();
				clearTimeout($timer);
				$timer = null;
				cedeplacer(newposition+1);
			});
		});
		
	};
})(jQuery);